#include "list.h"
#include "Element_data.h"

// 编写 增 删 改 查 打印 的函数


// 顺序表的初始化：    创建一个 班级 将len 等于 0
void Init_Sql_List(sq_list *L)
{
    L->len = 0;
}

// 顺序表的插入：尾插 
void tail_insert_list(sq_list *L, stu data)
{
    // 安全判断
    if (L == NULL || !IsFull_Sql_List(L))
    {
        printf("表为NULL或已满,无法添加用户\n");
        return;
    }
    IsFull_Sql_List(L);
    // 第一步传值
    L->data[L->len] = data;
    // 第二步修改len
    L->len++;
}


// 顺序表的删除：尾删
void tail_del_list(sq_list *L)
{
    IsEmpty_Sql_List(L);
    printf("你删除了%s的信息!\n", L->data[L->len - 1].name);
    find_by_name(L, L->data[L->len - 1].name);
    L->len--;
}

// 顺序表的查找：按名字查找并输出其全部信息,返回其位置i
int find_by_name(sq_list *L, char *name)
{
    for (int i = 0; i < L->len; i++)
    {
        if (!strcmp(L->data[i].name,name))
        {
            printf("|序号\t|名字\t|性别\t|学号\t|年龄\t|成绩\t|\n");
            printf("|%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n",
                   i + 1, L->data[i].name, L->data[i].sex, L->data[i].id, L->data[i].age, L->data[i].grade);
            return i;
        }
    }
}

// 顺序表的遍历：
void printf_Sql_List(sq_list *L)
{
    printf("|序号\t|名字\t|性别\t|学号\t|年龄\t|成绩\t|\n");
    // 数据
    for (int i = 0; i < L->len; i++)
    {
        printf("|%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n", 
        i + 1, L->data[i].name, L->data[i].sex, L->data[i].id,L->data[i].age, L->data[i].grade);
    }
}

// 顺序表的判空：
int IsEmpty_Sql_List(sq_list *L)
{
    if (L->len == 0)
    {
        printf("表的数据为空!\n");
        return 0;
    }
    else if (L == NULL)
    {
        printf("表为NULL\n");
        return 0;
    }
    else
        return 1;
}

// 顺序表的判满：
int IsFull_Sql_List(sq_list *L)
{
    if (L->len >= MAX_SIZE)
    {
        printf("学生表的数据已经满了!\n");
        return 0;
    }
    else
        return 1;
}

// 顺序表的清空：
void Clear_Sql_List(sq_list *L)
{
    L->len = 0;
    printf("顺序表已清空!\n");
}

void IS_continue()
{
    int contiue_flag;
    printf("按任意数字继续:");
    scanf("%d", &contiue_flag);
    if (contiue_flag == 0)
    {
        return;
    }
}

// 通过用户名查找删除(按值查找删除)
void byname_delete(sq_list *L)
{
    char my_name[36];              // 用户接收用户输入的姓名
    printf("请输入你需要删除的学生:");
    scanf("%s", my_name);
    int i = find_by_name(L, my_name); // 先找到该用户的位置
    // 后面的数据依次往前移，覆盖掉位置为i的数据
    for (int j = i; j < L->len; j++)
    {
        L->data[j] = L->data[j + 1]; // 后面的数据依次往前移
    }
    // 长度减一
    L->len--;
}